diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index e568bce..2748a44 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -216,7 +216,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Generate CVS from a query result object
+	 * Generate CSV from a query result object
 	 *
 	 * @access	public
 	 * @param	object	The query result object
@@ -224,7 +224,7 @@
 	 * @param	string	The newline character - \n by default
 	 * @return	string
 	 */
-	function cvs_from_result($query, $delim = "\t", $newline = "\n")
+	function csv_from_result($query, $delim = "\t", $newline = "\n")
 	{
 		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
 		{
@@ -502,6 +502,7 @@
 		{
 			$obj->output->set_header('Content-Type: '.$mime);
 			$obj->output->set_header('Content-Disposition: inline; filename="'.$prefs['filename'].'.'.$ext[$prefs['format']].'"');
+			$obj->output->set_header('Content-Transfer-Encoding: binary');
 			$obj->output->set_header('Expires: 0');
 			$obj->output->set_header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 			$obj->output->set_header('Pragma: public');
@@ -510,26 +511,27 @@
 		{
 			$obj->output->set_header('Content-Type: '.$mime);
 			$obj->output->set_header('Content-Disposition: attachment; filename="'.$prefs['filename'].'.'.$ext[$prefs['format']].'"');
+			$obj->output->set_header('Content-Transfer-Encoding: binary');
 			$obj->output->set_header('Expires: 0');
 			$obj->output->set_header('Pragma: no-cache');
 		}
-	
-	
-			// Write the file based on type
-			switch ($prefs['format'])
-			{
-				case 'gzip' : 	$obj->output->set_output(gzencode($this->_backup($prefs)));
-					break;
-				case 'txt'	: 	$obj->output->set_output($this->_backup($prefs));
-					break;
-				default		:
-								require BASEPATH.'libraries/Zip.php';
-							
-								$zip = new Zip;
-								$zip->add_file($this->_backup($prefs), $prefs['filename'].'.sql');
-								$obj->output->set_output($zip->output_zipfile());
-					break;			
-			}
+
+
+		// Write the file based on type
+		switch ($prefs['format'])
+		{
+			case 'gzip' : 	$obj->output->set_output(gzencode($this->_backup($prefs)));
+				break;
+			case 'txt'	: 	$obj->output->set_output($this->_backup($prefs));
+				break;
+			default		:
+							require BASEPATH.'libraries/Zip.php';
+						
+							$zip = new Zip;
+							$zip->add_file($this->_backup($prefs), $prefs['filename'].'.sql');
+							$obj->output->set_output($zip->output_zipfile());
+				break;			
+		}
 
 		return TRUE;
 	}
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 51f4550..c02074f 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -80,6 +80,13 @@
 	{	
 		// Prep the class name
 		$class = strtolower(str_replace(EXT, '', $class));
+		
+		// Bug fix for backward compat.  
+		// Kill this at some point in the future
+		if ($class == 'unit_test')
+		{
+			$class = 'unit';
+		}
 
 		// Is this a class extension request?	
 		if (substr($class, 0, 3) == 'my_')
@@ -168,9 +175,8 @@
 	 * @return	null
 	 */
 	function _ci_init_class($class, $prefix = '', $config = NULL)
-	{
+	{	
 		// Is there an associated config file for this class?
-		
 		if ($config == NULL)
 		{
 			if (file_exists(APPPATH.'config/'.$class.EXT))
@@ -185,22 +191,19 @@
 		}
 		else
 		{
-			$name = $prefix.ucfirst($class);
+			$name = $prefix.$class;
 		}
-		
-		$remap = array(
-						'Unit_test' 	=> 'unit'
-						);
 						
 		$varname = ( ! isset($remap[$class])) ? $class : $remap[$class];
-		
+		$varname = strtolower($varname);
+				
 		// Instantiate the class
 		if ($config !== NULL)
 		{
 			$this->$varname = new $name($config);
 		}
 		else
-		{
+		{		
 			$this->$varname = new $name;
 		}	
 	}
diff --git a/system/libraries/Unit_test.php b/system/libraries/Unit_test.php
deleted file mode 100644
index 0df78c2..0000000
--- a/system/libraries/Unit_test.php
+++ /dev/null
@@ -1,331 +0,0 @@
-<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
-/**
- * Code Igniter
- *
- * An open source application development framework for PHP 4.3.2 or newer
- *
- * @package		CodeIgniter
- * @author		Rick Ellis
- * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html 
- * @link		http://www.codeigniter.com
- * @since		Version 1.3.1
- * @filesource
- */
- 
-// ------------------------------------------------------------------------
-
-/**
- * Unit Testing Class
- * 
- * Simple testing class
- *
- * @package		CodeIgniter
- * @subpackage	Libraries
- * @category	UnitTesting
- * @author		Rick Ellis
- * @link		http://www.codeigniter.com/user_guide/libraries/uri.html
- */
-class CI_Unit {
-
-	var $active			= TRUE;
-	var $results 		= array();
-	var $strict			= FALSE;
-	var $_template 		= NULL;
-	var $_template_rows	= NULL;
-
-	function CI_Unit()
-	{
-		log_message('debug', "Unit Testing Class Initialized");
-	}	
-
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Run the tests
-	 *
-	 * Runs the supplied tests
-	 *
-	 * @access	public
-	 * @param	mixed
-	 * @param	mixed
-	 * @param	string
-	 * @return	string
-	 */	
-	function run($test, $expected = TRUE, $test_name = 'undefined')
-	{
-		if ($this->active == FALSE)
-			return;
-			
-		if (in_array($expected, array('is_string', 'is_bool', 'is_true', 'is_false', 'is_int', 'is_numeric', 'is_float', 'is_double', 'is_array', 'is_null'), TRUE))
-		{
-			$expected = str_replace('is_float', 'is_double', $expected);
-			$result = ($expected($test)) ? TRUE : FALSE;	
-			$extype = str_replace(array('true', 'false'), 'bool', str_replace('is_', '', $expected));
-		}
-		else
-		{
-			if ($this->strict == TRUE)
-				$result = ($test === $expected) ? TRUE : FALSE;	
-			else
-				$result = ($test == $expected) ? TRUE : FALSE;	
-			
-			$extype = gettype($expected);
-		}
-				
-		$back = $this->_backtrace();
-	
-		$report[] = array (
-							'test_name'			=> $test_name,
-							'test_datatype'		=> gettype($test),
-							'res_datatype'		=> $extype,
-							'result'			=> ($result === TRUE) ? 'passed' : 'failed',
-							'file'				=> $back['file'],
-							'line'				=> $back['line']
-						);
-
-		$this->results[] = $report;		
-				
-		return($this->report($this->result($report)));
-	}
-
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Generate a report
-	 *
-	 * Displays a table with the test data
-	 *
-	 * @access	public
-	 * @return	string
-	 */
-	function report($result = array())
-	{	
-		if (count($result) == 0)
-		{
-			$result = $this->result();
-		}
-		
-		$this->_parse_template();
-	
-		$r = '';
-		foreach ($result as $res)
-		{
-			$table = '';
-		
-			foreach ($res as $key => $val)
-			{
-				$temp = $this->_template_rows;			
-				$temp = str_replace('{item}', $key, $temp);
-				$temp = str_replace('{result}', $val, $temp);
-				$table .= $temp;
-			}
-			
-			$r .= str_replace('{rows}', $table, $this->_template);
-		}
-	
-		return $r;	
-	}	
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Use strict comparison
-	 *
-	 * Causes the evaluation to use === rather then ==
-	 *
-	 * @access	public
-	 * @param	bool
-	 * @return	null
-	 */
-	function use_strict($state = TRUE)
-	{
-		$this->strict = ($state == FALSE) ? FALSE : TRUE;
-	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Make Unit testing active
-	 *
-	 * Enables/disables unit testing  
-	 *
-	 * @access	public
-	 * @param	bool
-	 * @return	null
-	 */
-	function active($state = TRUE)
-	{
-		$this->active = ($state == FALSE) ? FALSE : TRUE;
-	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Result Array
-	 *
-	 * Returns the raw result data
-	 *
-	 * @access	public
-	 * @return	array
-	 */
-	function result($results = array())
-	{	
-		$obj =& get_instance();
-		$obj->load->language('unit_test');
-		
-		if (count($results) == 0)
-		{
-			$results = $this->results;
-		}
-		
-		$retval = array();
-		foreach ($results as $result)
-		{
-			$temp = array();
-			foreach ($result as $key => $val)
-			{
-				if (is_array($val))
-				{
-					foreach ($val as $k => $v)
-					{
-						if (FALSE !== ($line = $obj->lang->line(strtolower('ut_'.$v))))
-						{
-							$v = $line;
-						}				
-						$temp[$obj->lang->line('ut_'.$k)] = $v;					
-					}
-				}
-				else
-				{
-					if (FALSE !== ($line = $obj->lang->line(strtolower('ut_'.$val))))
-					{
-						$val = $line;
-					}				
-					$temp[$obj->lang->line('ut_'.$key)] = $val;
-				}
-			}
-			
-			$retval[] = $temp;
-		}
-	
-		return $retval;
-	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Set the template
-	 *
-	 * This lets us set the template to be used to display results
-	 *
-	 * @access	public
-	 * @params	string
-	 * @return	void
-	 */	
-	function set_template($template)
-	{
-		$this->_template = $template;
-	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Generate a backtrace
-	 *
-	 * This lets us show file names and line numbers 
-	 *
-	 * @access	private
-	 * @return	array
-	 */
-	function _backtrace() 
-	{
-		if (function_exists('debug_backtrace')) 
-		{
-			$back = debug_backtrace();
-			
-			$file = ( ! isset($back['1']['file'])) ? '' : $back['1']['file'];
-			$line = ( ! isset($back['1']['line'])) ? '' : $back['1']['line'];
-						
-			return array('file' => $file, 'line' => $line);
-		}
-		return array('file' => 'Unknown', 'line' => 'Unknown');
-	}
-
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Get Default Template
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _default_template()
-	{	
-		$this->_template = '	
-		<div style="margin:15px;background-color:#ccc;">
-		<table border="0" cellpadding="4" cellspacing="1" style="width:100%;">		
-		{rows}
-		</table></div>';
-		
-		$this->_template_rows = '
-		<tr>
-		<td style="background-color:#fff;width:140px;font-size:12px;font-weight:bold;">{item}</td>
-		<td style="background-color:#fff;font-size:12px;">{result}</td>
-		</tr>
-		';	
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Parse Template
-	 *
-	 * Harvests the data within the template {pseudo-variables}
-	 *
-	 * @access	private
-	 * @return	void
-	 */
- 	function _parse_template()
- 	{
- 		if ( ! is_null($this->_template_rows))
- 		{
- 			return;
- 		}
- 		
- 		if (is_null($this->_template))
- 		{
- 			$this->_default_template();
- 			return;
- 		}
- 		
-		if ( ! preg_match("/\{rows\}(.*?)\{\/rows\}/si", $this->_template, $match))
-		{
- 			$this->_default_template();
- 			return;
-		}
-
-		$this->_template_rows = $match['1'];
-		$this->_template = str_replace($match['0'], '{rows}', $this->_template); 	
- 	}
- 	
-}
-// END Unit_test Class
-
-/**
- * Helper functions to test boolean true/false
- * 
- *
- * @access	private
- * @return	bool
- */
-function is_true($test)
-{
-	return (is_bool($test) AND $test === TRUE) ? TRUE : FALSE;
-}
-function is_false($test)
-{
-	return (is_bool($test) AND $test === FALSE) ? TRUE : FALSE;
-}
-
-?>
\ No newline at end of file
diff --git a/system/libraries/Zip.php b/system/libraries/Zip.php
index aa26438..2ffed9f 100644
--- a/system/libraries/Zip.php
+++ b/system/libraries/Zip.php
@@ -18,9 +18,11 @@
 /**
  * Zip Compression Class
  *
- * This class is based on a library aquired at Zend:
+ * This class is based on a library I found at Zend:
  * http://www.zend.com/codex.php?id=696&single=1
  *
+ * The original library is a little rough around the edges so I 
+ * refactored it and added several additional methods -- Rick Ellis
  * 
  * @package		CodeIgniter
  * @subpackage	Libraries
@@ -28,12 +30,18 @@
  * @author		Rick Ellis
  * @link		http://www.codeigniter.com/user_guide/general/encryption.html
  */
-class Zip  {  
-	
+class CI_Zip  {  
+
+	var $zipfile	= '';	
 	var $zipdata	= array();
 	var $directory	= array();
 	var $offset		= 0;
-	var $zipfile	= '';
+
+	function CI_Zip()
+	{
+		log_message('debug', "Zip Compression Class Initialized");
+	}
+	
 
 	/**
 	 * Add Directory
@@ -41,13 +49,33 @@
 	 * Lets you add a virtual directory into which you can place files.
 	 *
 	 * @access	public
+	 * @param	mixed	the directory name. Can be string or array
+	 * @return	void
+	 */
+	function add_dir($directory) 
+	{
+		foreach ((array)$directory as $dir)
+		{
+			if ( ! preg_match("|.+/$|", $dir))
+			{
+				$dir .= '/';
+			}
+		
+			$this->_add_dir($dir);
+		}
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Add Directory
+	 *
+	 * @access	private
 	 * @param	string	the directory name
 	 * @return	void
 	 */
-	function add_dir($dir) 
+	function _add_dir($dir) 
 	{
-		$this->zipfile = '';
-	
 		$dir = str_replace("\\", "/", $dir);  
 		
 		$this->zipdata[] = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"
@@ -78,27 +106,50 @@
 		
 		$this->offset = $newoffset;
 		$this->directory[] = $record;  
-	}	 
-
+	}
+	
 	// --------------------------------------------------------------------
 
 	/**
-	 * Add File
+	 * Add Data to Zip
 	 *
 	 * Lets you add files to the archive. If the path is included
 	 * in the filename it will be placed within a directory.  Make
 	 * sure you use add_dir() first to create the folder.
 	 *
 	 * @access	public
-	 * @param	string	the file name
+	 * @param	mixed
+	 * @param	string
+	 * @return	void
+	 */	
+	function add_data($filepath, $data = NULL)
+	{
+		if (is_array($filepath))
+		{
+			foreach ($filepath as $path => $data)
+			{
+				$this->_add_data($path, $data);
+			}
+		}
+		else
+		{
+			$this->_add_data($filepath, $data);
+		}
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Add Data to Zip
+	 *
+	 * @access	private
+	 * @param	string	the file name/path
 	 * @param	string	the data to be encoded
 	 * @return	void
 	 */	
-	function add_file($filename, $data)
-	{
-		$this->zipfile = '';
-	
-		$filename = str_replace("\\", "/", $filename);  
+	function _add_data($filepath, $data)
+	{	
+		$filepath = str_replace("\\", "/", $filepath);  
 			
 		$oldlen	= strlen($data);  
 		$crc32	= crc32($data);  
@@ -111,9 +162,9 @@
 							.pack('V', $crc32)
 							.pack('V', $newlen)
 							.pack('V', $oldlen)
-							.pack('v', strlen($filename))
+							.pack('v', strlen($filepath))
 							.pack('v', 0)
-							.$filename
+							.$filepath
 							.$gzdata
 							.pack('V', $crc32)
 							.pack('V', $newlen)
@@ -125,7 +176,7 @@
 					.pack('V', $crc32)
 					.pack('V', $newlen)
 					.pack('V', $oldlen)
-					.pack('v', strlen($filename))
+					.pack('v', strlen($filepath))
 					.pack('v', 0)
 					.pack('v', 0)
 					.pack('v', 0)
@@ -134,26 +185,7 @@
 					.pack('V', $this->offset); 
 		
 		$this->offset = $newoffset;
-		$this->directory[] = $record.$filename;  
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Read the content of a file
-	 *
-	 * @access	public
-	 * @param	string	the file path
-	 * @return	string
-	 */	
-	function read_file($filepath)
-	{
-		if ( ! file_exists($filepath))
-		{
-			return FALSE;
-		}
-	
-		return file_get_contents($filepath);
+		$this->directory[] = $record.$filepath;  
 	}
 	
 	// --------------------------------------------------------------------
@@ -166,11 +198,19 @@
 	 */	
 	function get_zip()
 	{ 
+		// We cache the zip data so multiple calls
+		// do not require recompiling
 		if ($this->zipfile != '')
 		{
 			return $this->zipfile;
 		}
 	
+		// Is there any data to return?
+		if (count($this->zipdata) == 0)
+		{
+			return FALSE;
+		}
+	
 		$data	= implode('', $this->zipdata);  
 		$dir	= implode('', $this->directory);  
 				
@@ -180,7 +220,7 @@
 						.pack('V', strlen($dir))
 						.pack('V', strlen($data))
 						."\x00\x00";
-						
+		
 		return $this->zipfile;
 	}
 	
@@ -196,15 +236,15 @@
 	 * @param	string	the data to be encoded
 	 * @return	bool
 	 */	
-	function write_file($filename, $data)
+	function write_zip($filepath)
 	{
-		if ( ! ($fp = fopen($filename, "wb")))
+		if ( ! ($fp = fopen($filepath, "wb")))
 		{
 			return FALSE;
 		}
 		
 		flock($fp, LOCK_EX);	
-		fwrite($fp, $data);
+		fwrite($fp, $this->get_zip());
 		flock($fp, LOCK_UN);
 		fclose($fp);
 
@@ -216,13 +256,12 @@
 	/**
 	 * Download
 	 *
-	 *
 	 * @access	public
 	 * @param	string	the file name
 	 * @param	string	the data to be encoded
 	 * @return	bool
 	 */		
-	function download($filename, $data)
+	function download($filename)
 	{
 		if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
 		{
@@ -232,7 +271,7 @@
 			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 			header("Content-Transfer-Encoding: binary");
 			header('Pragma: public');
-			header("Content-Length: ".strlen($data));
+			header("Content-Length: ".strlen($this->get_zip()));
 		} 
 		else 
 		{
@@ -241,10 +280,29 @@
 			header("Content-Transfer-Encoding: binary");
 			header('Expires: 0');
 			header('Pragma: no-cache');
-			header("Content-Length: ".strlen($data));
+			header("Content-Length: ".strlen($this->get_zip()));
 		}
 	
-		echo $data;
+		echo $this->get_zip();
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Initialize Data
+	 *
+	 * Lets you clear current zip data.  Useful if you need to create 
+	 * multiple zips with different data.
+	 *
+	 * @access	public
+	 * @return	void
+	 */		
+	function clear_data()
+	{
+		$this->zipfile		= '';
+		$this->zipdata 		= array();
+		$this->directory	= array();
+		$this->offset		= array();
 	}
 	
 }
